
import QS from "qs";

Date.prototype.Format = function (fmt) { //author: meizz 
  var o = {
    "M+": this.getMonth() + 1, //月份 
    "d+": this.getDate(), //日 
    "h+": this.getHours(), //小时 
    "m+": this.getMinutes(), //分 
    "s+": this.getSeconds(), //秒 
    "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
    "S": this.getMilliseconds() //毫秒 
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
}

var utils = {};
function setTp(typ) {
  return function (obj) {
    return Object.prototype.toString.call(obj) === "[object " + typ + "]"
  }
}
utils.isArray = setTp("Array");
utils.isFunction = setTp("Function");
utils.isObject = setTp("Object");
utils.isString = setTp("String");
utils.isNumber = setTp("Number");


//校验数据
utils.check = {};

//手机号码
utils.check.mobile = function (data) {
  var reg = /^(13|14|15|17|18|19)[0-9]{9}$/;
  return reg.test(data);
};

//Email
utils.check.email = function (data) {
  var reg = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/;
  return reg.test(data);
};

//qq
utils.check.qq = function (data) {
  var reg = /^[1-9]([0-9]{5,11})$/;
  return reg.test(data);
};


// 把 #fffff 类型的颜色，转换为 rgba 值
utils.colorToRGB = (function () {
  let cache = {};

  return function (val, opa) {
    let k = val;
    if (opa) {
      k = `${k}_${opa}`;
    }
    if (cache[k]) {
      return cache[k];
    }

    const pattern = /^(#?)[a-fA-F0-9]{6}$/; //16进制颜色值校验规则
    const flag = typeof opa == 'number'; //判断是否有设置不透明度

    if (!pattern.test(val)) { //如果值不符合规则返回空字符
      return '';
    }

    let v = val.replace(/#/, ''); //如果有#号先去除#号
    let rgbArr = [];
    let rgbStr = '';

    for (let i = 0; i < 3; i++) {
      let item = v.substring(i * 2, i * 2 + 2);
      let num = parseInt(item, 16);
      rgbArr.push(num);
    }

    rgbStr = rgbArr.join();
    rgbStr = 'rgb' + (flag ? 'a' : '') + '(' + rgbStr + (flag ? ',' + opa : '') + ')';

    cache[k] = rgbStr; //加入缓存
    return rgbStr;
  }
}());


// 加载图片
utils.loadImg = function (url,attrs) {
  attrs = attrs || {};
  return new Promise((resolve, reject) => {
    let img = new Image();
    for(let i in attrs){
      img[i] = attrs[i];
    }
    img.onload = function () {
      resolve(img);
    }
    img.onerror = reject;
    img.src = url;
  })
}

// 文件读取为 base 64 
utils.fileRead = function (file) {
  return new Promise((resolve, reject) => {
    var reader = new FileReader();
    reader.onload = function (e) {
      resolve(e.target.result);
    };
    reader.onerror = reject;
    reader.readAsDataURL(file);
  });
}
// file 转 图片，压缩
utils.fileToImg = async function (file) {
  let url = await utils.fileRead(file);
  let img = await utils.loadImg(url);
  return Promise.resolve(img);
}

// base 64 转 blob
utils.dataURLtoFile = function (b64Data,filename) {
  filename = filename || "test.png";
 let mime = "image/png";
 var bstr = atob(b64Data.replace(/^data:image\/(png|jpeg|jpg);base64,/, ''));
 var n = bstr.length; 
 var u8arr = new Uint8Array(n);
 while(n--){
     u8arr[n] = bstr.charCodeAt(n);
 }
 //转换成file对象
 return new File([u8arr], filename, {type:mime});
 //转换成成blob对象
 //return new Blob([u8arr],{type:mime});
 return blob;

}



// 命令设计模式，用于撤销回复
utils.Command = function () {
  this.task = []; // 所有的任务
  this.unTask = []; // 被撤销出来的任务
}

// 加入任务
/**
 * @param {Function} fn : 需要执行的函数
 * @param {Boolean} run : 是否在加入的同时，执行
 */
utils.Command.prototype.add = function (fn, run) {
  this.task.push(fn);
  if (run) {
    fn();
  }
}

// 执行所有的命令
utils.Command.prototype.runAll = function () {
  for (let i = 0; i < this.task.length; i++) {
    this.task[i]();
  }
}

// 撤销回上一步
utils.Command.prototype.undo = function (fn) {
  if (this.task.length > 0) {
    fn && fn();
    let o = this.task.pop();
    this.unTask.push(o);
    this.runAll();
  }
}

// 恢复撤销
utils.Command.prototype.redo = function (fn) {
  if (this.unTask.length > 0) {
    fn && fn();
    let o = this.unTask.pop();
    this.task.push(o);
    this.runAll();
  }
}


// 清空任务队列
utils.Command.prototype.clear = function () {
  this.task = []; // 所有的任务
  this.unTask = []; // 被撤销出来的任务
}






//数据提交时间
utils.getMsgTime = function (num) {
  var currT = new Date();
  var createT = new Date(num);
  var currNum = currT.getTime();
  var creatNum = createT.getTime();
  var miss = currNum - creatNum;
  miss = miss / 1000 / 60; //以分为单位
  if (miss <= 1) {
    return "1分钟前";
  }

  if (miss < 60) {
    return Math.floor(miss) + "分钟前";
  }

  miss = miss / 60; //以小时为单位
  if (miss < 24) {
    return Math.floor(miss) + "小时前";
  }

  miss = miss / 24; //以天为单位
  if (miss <= 3) {
    return Math.floor(miss) + "天前";
  }
  var currY = currT.getFullYear();
  var cY = createT.getFullYear();
  if (currY == cY) {
    return createT.Format("MM月dd日");
  }
  if (currY > cY) {
    return createT.Format("yyyy年MM月dd日");
  }
  return "1分钟前";
}


//获取用户信息
utils.getUserId = function () {
  return utils.store.getCookie('userid');
}
//设置用户信息
utils.setUserId = function (value) {
  utils.store.setCookie("userid", value, 1);
}

//清除用户信息
utils.clearUserId = function () {
  utils.store.removeCookie("userid");
}


utils.store = {
  // 存储 cookie
  setCookie(name, value, iDay) {
    var oDate = new Date()
    oDate.setDate(oDate.getDate() + iDay)
    if (typeof value === 'object') {
      value = JSON.stringify(value)
    }
    document.cookie = name + '=' + value + ';expires=' + oDate + "; path=/"
  },
  // 获取 cookie
  getCookie(name) {
    var arr = document.cookie.split('; ')
    for (var i = 0; i < arr.length; i++) {
      var arr2 = arr[i].split('=')
      if (arr2[0] === name) {
        try {
          return JSON.parse(arr2[1]);
        } catch (e) {
          return arr2[1];
        }
      }
    }
    return ''
  },

  // 删除 cookie
  removeCookie(name) {
    this.setCookie(name, 1, -1)
  }

};





export default utils;